 /**********************************************************************
 * Fichier : USBDrivaCore.h
 *
 * Résumé : Fichier d'en-tête qui déclare les fonctions "coeur"
 *          (internes) du module ainsi que ses structures personnelles.
 *
 * Auteur : Vincent Léger et Francisco Ramos
 *
 * Dernière modification : dimanche 9 décembre 2012
 *
 **********************************************************************/

#ifndef _USBDRIVACORE_H_
#define _USBDRIVACORE_H_

 /******************************************
 *********DÉCLARATION DE LIBRAIRIES*********
 ******************************************/
#include "KernelLibz.h"         //librairies du kernel linux
#include "DebugMacros.h"        //macros pour debogage
#include "DrivaDefinitions.h"  //définition des

 /******************************************
 ************VARIABLES GLOBALES*************
 ******************************************/
int sentURB;    //note: faut vraiment utiliser quelque chose de mieux...
unsigned int myStatus = 0;
unsigned int myLength = MAX_DATA_SIZE;
unsigned int myLengthUsed = 0;
char myData[MAX_DATA_SIZE];
struct urb *myUrb[NB_URB];   //pointeur vers les URB utilisés

 /******************************************
 **DÉCLARATION DES INFORMATIONS DU PRODUIT**
 ******************************************/
//ID TABLE (identification dans USBCORE)
static struct usb_device_id driva_table [] =
{
    { USB_DEVICE(DRIVA_VENDOR_ID, DRIVA_PROD_ID) },
    { }
};
MODULE_DEVICE_TABLE (usb, driva_table); //insertion

 /******************************************
 **********STRUCTURE  PERSONNELLES**********
 ******************************************/
struct usbdriva_dev
{
    struct usb_device*      udev;                   //pointeur sur le device du module
    struct usb_interface*   interface;              //pour capturer l'interface video
    //char                    *xferBuffer[NB_URB];    //buffer de transfert (1 par URB)
    struct completion       callback;               //pour synchroniser GRAB et READ
    struct semaphore        SemRead;    //utilisé par le READ pour eviter un dead-lock avec le callback
    struct semaphore        SemGrab;    //utilisé par le GRAB pour synchro
    bool                    isOpen;     //utilisé pour bloquer l'accès à un second usagé
};                                      //1 seul usagé à la fois est permis

 /******************************************
 *********DÉCLARATION DE FONCTIONS**********
 ******************************************/
int initURB(struct usb_interface* intf);        //fonction d'initialisation des URBs
static void complete_callback(struct urb *urb); //fonction de callback pour les URBs asynchrones
//pour obtenir une interface valide (DEPRECATED)
//struct usb_endpoint_descriptor* GetHostDescriptor(struct usb_interface* intf);


#endif  //_USBDRIVACORE_H_

